﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using Tecnopez.Globals;
using BussinessLogicTecnoPez;
using Microsoft.Practices.EnterpriseLibrary.Validation;


public partial class Modules_ClasificacionIncubacion_ABMEstanque : System.Web.UI.Page
{
    private System.Web.UI.WebControls.GridView grdDatos; //Para acceso rapido
    private const string HABILITADO = "Habilitado";
    protected void Page_Load(object sender, EventArgs e)
    {
        //Este es para manipular la grilla mas facil dentro del abm.
        grdDatos = TecnopezDataGRIDABMView1.grdDatosAbmView;

        DataControlField[] d = new DataControlField[1];
        ImageField colD = new ImageField();
        colD.DataImageUrlField = "habilitado";

        colD.HeaderText = HABILITADO;
        colD.HeaderStyle.Width = 5;
        colD.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        d[0] = colD;

        TecnopezDataGRIDABMView1.setupGrid<Estanque>(cargarGrilla, TecnopezDataGRIDABMView1_ViewGridClic, grdDatos_RowDataBound, true, d, this.ViewState);


        cmdEliminar.Attributes.Add("onClick", "return confirm('Esta seguro de eliminar el registro?');");


        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/ic_soporte.gif";
        master.Titulo = "Gestión de Estanques.";


        if (!IsPostBack)
        {
            this.setMode(PageMode.ListMode);
            cboTipoEstanque.DataSource = Estanque.listaDeTiposDeEstanquesString;
            cboTipoEstanque.DataTextField = "Descripcion";
            cboTipoEstanque.DataValueField = "valor";
            cboTipoEstanque.DataBind();

        }

        popEmpleado.ObjType = typeof(Empleado);
        InicializarValidadores();


    }

    private void InicializarValidadores()
    {



    }

    void TecnopezDataGRIDABMView1_ViewGridClic(int indice)
    {
        cargarGrilla();
        int idEstanque = (int)grdDatos.DataKeys[indice].Value;
        Estanque.getManager.ClearFilters();
        Estanque.getManager.AddFilter(grdDatos.DataKeyNames[0], BussinessLogicTecnoPez.GenericManager<Estanque>.filterOperator.Equals, idEstanque);
        Estanque aux = Estanque.getManager.GetOne();
        setearDatosALaInterfaz(aux);

        this.setMode(PageMode.ViewMode);
    }

    private void setearDatosALaInterfaz(Estanque aux)
    {
        txtID.Text = aux.idEstanque.ToString();
        txtCapacidad.Text = aux.capacidad.ToString();
        txtDescripcion.Text = aux.descripcion.ToString();
        txtTamanio.Text = aux.tamanio.ToString();
        txtUbicacionDescript.Text = aux.ubicacion.ToString();
        popEmpleado.ItemSelected = aux.empleado;
        dtFechaDeAlta.Text = aux.fechaDeAlta.ToShortDateString();
        chkHabilitado.Checked = aux.habilitado;
        cboTipoEstanque.SelectedValue = aux.tipoDeEstanqueInt.ToString();
        //Todo: configurar el crokis
        if (aux.urlCrockis == null || aux.urlCrockis.Equals(string.Empty))
        {
            imgCrokis.Visible = false;
        }
        else
        {
            imgCrokis.Visible = true;
            imgCrokis.ImageUrl = "~/Images/" + aux.urlCrockis;
        }
    }

    private void cargarGrilla()
    {
        //Filtrar como deseeen
        Estanque.getManager.ClearFilters();
        Estanque.getManager.ClearOrders();
        Estanque.getManager.AddFilter("ubicacion", GenericManager<Estanque>.filterOperator.Like, txtBuscar.Text + "%");
        Estanque.getManager.AddFilter("descripcion", GenericManager<Estanque>.filterOperator.Like, txtDescripcionFiltro.Text + "%");

        //Acordarse de ordenar las cosas
        if (ViewState["orden"] != null)
        {
            Estanque.getManager.AddOrder(ViewState["orden"].ToString(), (GenericManager<Estanque>.Order.orderDirection)ViewState["ordenDireccion"]);

        }
        //y no menos importante llenen la tabla!
        grdDatos.DataSource = Estanque.getManager.GetFilter();
        grdDatos.DataBind();
    }

    protected void cmdBuscar_Click(object sender, EventArgs e)
    {
        setMode(PageMode.ListMode);
    }

    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        setMode(PageMode.NewMode);
    }

    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }

    private void setMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        txtID.Enabled = false;
        txtID.ForeColor = System.Drawing.Color.Black;
        lblResultado.Text = "";
        switch (mode)
        {
            case PageMode.EditMode:
                wzrABM.ActiveStepIndex = 1;
                cmdEditar.Visible = false;
                Functions.setearReadOnly(false, txtCapacidad, txtDescripcion, txtTamanio, txtUbicacionDescript);
                dtFechaDeAlta.Enabled = true;
                popEmpleado.Enable = true;
                chkHabilitado.Enabled = true;
                filCrokis.Enabled = true;
                cmdEliminar.Visible = true;
                cmdAceptar.Visible = true;
                break;

            case PageMode.ListMode:
                wzrABM.ActiveStepIndex = 0;
                break;

            case PageMode.NewMode:
                cmdAceptar.Visible = true;
                cmdEditar.Visible = false;
                cmdEliminar.Visible = false;
                Functions.limpiarTextBoxes(txtID, txtCapacidad, txtDescripcion, txtTamanio, txtUbicacionDescript);
                Functions.setearReadOnly(false, txtCapacidad, txtDescripcion, txtTamanio, txtUbicacionDescript);
                dtFechaDeAlta.Enabled = true;
                popEmpleado.Enable = true;
                chkHabilitado.Enabled = true;
                filCrokis.Enabled = true;
                cmdEliminar.Visible = false;
                wzrABM.ActiveStepIndex = 1;
                imgCrokis.Visible = false;
                dtFechaDeAlta.Text = DateTime.Now.ToShortDateString();
                break;

            case PageMode.ViewMode:
                wzrABM.ActiveStepIndex = 1;
                cmdEditar.Visible = true;
                cmdEliminar.Visible = true;
                cmdAceptar.Visible = false;
                Functions.setearReadOnly(true, txtCapacidad, txtDescripcion, txtTamanio, txtUbicacionDescript);
                dtFechaDeAlta.Enabled = false;
                popEmpleado.Enable = false;
                chkHabilitado.Enabled = false;
                filCrokis.Enabled = false;
                cmdEliminar.Visible = false;


                break;
            case PageMode.DeleteMode:
                break;
        }
    }

    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        lblResultado.Text = "";
        setMode(PageMode.ListMode);
    }

    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            DateTime fecha;
            if (!DateTime.TryParse(dtFechaDeAlta.Text, out fecha))
            {
                lblResultado.Text = "La fecha ingresada no es válida.";
                return;
            }
            if (popEmpleado.ItemSelected == null)
            {
                lblResultado.Text = "El campo empleado no es opcional.";
                return;
            }
            
            lblResultado.Text = "";
            if (getMode() == PageMode.NewMode)
            {
                AltaEntidad();

            }
            else if (getMode() == PageMode.EditMode)
            {
                ModificacionEntidad();
            }
            else
            {
                this.setMode(PageMode.ListMode);
            }



        }
    }

    private void ModificacionEntidad()
    {
        int idEstanque = int.Parse(txtID.Text);
        Estanque.getManager.ClearFilters();
        Estanque.getManager.AddFilter(grdDatos.DataKeyNames[0], BussinessLogicTecnoPez.GenericManager<Estanque>.filterOperator.Equals, idEstanque);
        Estanque aux = Estanque.getManager.GetOne();


        if (obtenerDatosDeLaInterfaz(aux) && Estanque.getManager.Update(aux))
        {
            lblResultado.Text = "";
            this.setMode(PageMode.ListMode);
            cargarGrilla();

        }
        else
        {
            lblResultado.Text = "Error al modificar el estanque. Verifique los datos.";
            Functions.LogError(Estanque.getManager.GeneratedException);
        }
    }

    private bool obtenerDatosDeLaInterfaz(Estanque aux)
    {
        try
        {
            if (!txtID.Text.Equals(string.Empty))
            {
                aux.idEstanque = Convert.ToInt32(txtID.Text);
            }
            aux.capacidad = Convert.ToInt32(txtCapacidad.Text);
            aux.descripcion = txtDescripcion.Text;
            aux.tamanio = Convert.ToDecimal(txtTamanio.Text);
            aux.ubicacion = txtUbicacionDescript.Text;
            aux.empleado = (Empleado)popEmpleado.ItemSelected;
            aux.fechaDeAlta = Convert.ToDateTime(dtFechaDeAlta.Text);
            aux.habilitado = chkHabilitado.Checked;
            aux.tipoDeEstanqueInt = Convert.ToInt16(cboTipoEstanque.SelectedValue);
            if (filCrokis.HasFile)
            {
                if (!filCrokis.PostedFile.ContentType.Equals("image/jpeg"))
                {
                    return false;
                }
                else
                {
                    string destino;
                    string nombreAleatorio;
                    nombreAleatorio = "crokisEstanque" + System.DateTime.Now.ToString("ddMMyyyyhhmmss") + ".jpg";
                    destino = Functions.getPhysicalPathTecnopezWEB(this) + "\\Images\\" + nombreAleatorio;
                    filCrokis.PostedFile.SaveAs(destino);
                    aux.urlCrockis = nombreAleatorio;
                }
            }
            return true;
        }
        catch
        {
            return false;
        }
    }

    private void AltaEntidad()
    {
        Estanque nueva = new Estanque();

        if (obtenerDatosDeLaInterfaz(nueva) && Estanque.getManager.Insert(nueva))
        {
            lblResultado.Text = "";
            this.setMode(PageMode.ListMode);
            cargarGrilla();

        }
        else
        {
            lblResultado.Text = "Error al crear la Estanque. Verifique los datos.";
            Functions.LogError(Estanque.getManager.GeneratedException);
        }


    }



    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        this.setMode(PageMode.EditMode);
    }

    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        this.setMode(PageMode.DeleteMode);
        EliminarEntidad();
    }



    private void EliminarEntidad()
    {
        if (getMode() == PageMode.DeleteMode)
        {
            int idEstanque = int.Parse(txtID.Text);
            Estanque.getManager.ClearFilters();
            Estanque.getManager.AddFilter(grdDatos.DataKeyNames[0], BussinessLogicTecnoPez.GenericManager<Estanque>.filterOperator.Equals, idEstanque);
            Estanque aux = Estanque.getManager.GetOne();
            aux.baja = "S";
            if (Estanque.getManager.Update(aux))
            {
                lblResultado.Text = "";
                this.setMode(PageMode.ListMode);
                cargarGrilla();

            }
            else
            {
                lblResultado.Text = "Error al eliminar la Estanque.";
                Functions.LogError(Estanque.getManager.GeneratedException);
            }
        }
    }

    protected void btnSi_Click1(object sender, EventArgs e)
    {

        EliminarEntidad();

    }

    protected void grdDatos_RowDataBound(object sender, GridViewRowEventArgs e)
    {

        int IndiceEstado = 0;



        for (int celda = 0; celda < grdDatos.Columns.Count; celda++)
        {
            if (grdDatos.Columns[celda].HeaderText == HABILITADO)
            {
                IndiceEstado = celda;
            }
        }



        if (e.Row.DataItem != null)
        {
            if (e.Row.DataItem is Estanque)
            {
                Image estado = (Image)e.Row.Cells[IndiceEstado].Controls[0];
                Estanque emp = (Estanque)e.Row.DataItem;


                if (emp.habilitado)
                {
                    estado.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/Activo.gif";
                }
                else
                {
                    estado.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/Inactivo.gif";
                }
            }
        }
    }
}
